#!/usr/bin/env python
"""
创建用户组和权限的管理脚本
"""
import os
import django

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'admin_learn_project.settings')
django.setup()

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from core.models import CustomUser
from products.models import Product, Category, Brand
from orders.models import Order, OrderItem


def create_groups_and_permissions():
    """创建用户组和权限"""
    print("正在创建用户组和权限...")

    # 创建产品管理员组
    product_group, created = Group.objects.get_or_create(name='产品管理员')
    if created:
        print("创建产品管理员组")

        # 添加产品相关权限
        product_perms = Permission.objects.filter(
            content_type__model__in=['product', 'category', 'brand', 'productimage']
        )
        product_group.permissions.set(product_perms)

    # 创建订单管理员组
    order_group, created = Group.objects.get_or_create(name='订单管理员')
    if created:
        print("创建订单管理员组")

        # 添加订单相关权限
        order_perms = Permission.objects.filter(
            content_type__model__in=['order', 'orderitem', 'orderstatushistory']
        )
        order_group.permissions.set(order_perms)

    # 创建用户管理员组
    user_group, created = Group.objects.get_or_create(name='用户管理员')
    if created:
        print("创建用户管理员组")

        # 添加用户相关权限
        user_perms = Permission.objects.filter(
            content_type__model='customuser'
        )
        user_group.permissions.set(user_perms)

    # 创建测试管理员用户
    create_test_staff_users()


def create_test_staff_users():
    """创建测试管理员用户"""
    print("正在创建测试管理员用户...")

    # 产品管理员
    product_admin, created = CustomUser.objects.get_or_create(
        username='product_admin',
        defaults={
            'email': 'product@example.com',
            'first_name': '产品',
            'last_name': '管理员',
            'is_staff': True,
            'is_active': True,
        }
    )
    if created:
        product_admin.set_password('admin123')
        product_admin.save()
        product_admin.groups.add(Group.objects.get(name='产品管理员'))
        print("创建产品管理员: product_admin")

    # 订单管理员
    order_admin, created = CustomUser.objects.get_or_create(
        username='order_admin',
        defaults={
            'email': 'order@example.com',
            'first_name': '订单',
            'last_name': '管理员',
            'is_staff': True,
            'is_active': True,
        }
    )
    if created:
        order_admin.set_password('admin123')
        order_admin.save()
        order_admin.groups.add(Group.objects.get(name='订单管理员'))
        print("创建订单管理员: order_admin")

    # 用户管理员
    user_admin, created = CustomUser.objects.get_or_create(
        username='user_admin',
        defaults={
            'email': 'user@example.com',
            'first_name': '用户',
            'last_name': '管理员',
            'is_staff': True,
            'is_active': True,
        }
    )
    if created:
        user_admin.set_password('admin123')
        user_admin.save()
        user_admin.groups.add(Group.objects.get(name='用户管理员'))
        print("创建用户管理员: user_admin")


def create_sample_orders():
    """创建示例订单"""
    print("正在创建示例订单...")

    from decimal import Decimal
    import uuid
    from datetime import datetime

    # 获取测试用户和产品
    users = CustomUser.objects.filter(username__startswith='user')[:3]
    products = Product.objects.all()[:3]

    if not users.exists() or not products.exists():
        print("没有足够的测试数据，请先运行 create_test_data.py")
        return

    # 为每个用户创建一个订单
    for i, user in enumerate(users):
        # 创建订单
        order = Order.objects.create(
            user=user,
            shipping_name=f"{user.first_name}{user.last_name}",
            shipping_phone=f"138000000{i}",
            shipping_address=f"测试地址{i+1}号",
            subtotal=Decimal('999.00'),
            shipping_cost=Decimal('10.00'),
            total_amount=Decimal('1009.00'),
            status='pending' if i == 0 else 'paid',
            payment_method='alipay'
        )

        # 添加订单项目
        if products.exists():
            product = products[i] if i < len(products) else products[0]
            OrderItem.objects.create(
                order=order,
                product=product,
                quantity=1,
                unit_price=product.price,
                total_price=product.price,
                product_name=product.name
            )

        print(f"创建订单: {order.order_number}")


if __name__ == '__main__':
    create_groups_and_permissions()
    create_sample_orders()

    print("\n✅ 权限和测试数据创建完成！")
    print("\n🔑 可用的登录账户：")
    print("1. 超级管理员: admin / admin123")
    print("2. 产品管理员: product_admin / admin123")
    print("3. 订单管理员: order_admin / admin123")
    print("4. 用户管理员: user_admin / admin123")
